package com.ruoyi.common.tools.excel.listener.asset;

import com.alibaba.excel.context.AnalysisContext;
import com.ruoyi.asset.workman.domain.vo.WorkmanVo;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.service.DictService;
import com.ruoyi.common.core.service.PostService;
import com.ruoyi.common.tools.excel.base.MyExcelListener;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.erecord.region.domain.vo.RegionVo;
import com.ruoyi.erecord.region.service.IRegionService;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysPostService;

import java.util.ArrayList;
import java.util.List;

public class WorkmanExcelListener extends MyExcelListener<WorkmanVo> {

	private ISysDictDataService sysDictDataService = SpringUtils.getBean(ISysDictDataService.class);

	private IRegionService regionService = SpringUtils.getBean(IRegionService.class);

    private PostService postService = SpringUtils.getBean(PostService.class);

	private String serviceType;

	private String cityName = "深圳市";

	public WorkmanExcelListener(String serviceType) {
		this.serviceType = serviceType;
	}

	@Override
	public void doValidate(WorkmanVo data, AnalysisContext context) {
		String regionId = null;
		String streetId = null;
		String communityId = null;
        String postId = null;

		List<String> validataList = new ArrayList<>();

        /**
         * 姓名不能为空
         */
        if(StringUtils.isBlank((data.getName()))) {
            validataList.add("姓名不能为空");
        }
        /**
         * 状态不能为空
         */
        if(StringUtils.isBlank(data.getStatus())) {
            validataList.add("状态不能为空");
        }
        /**
         * 人员类别不能为空
         */
        if(StringUtils.isBlank(data.getCategory())) {
            validataList.add("人员类别不能为空");
        }
        /**
         * 类别名称不能为空
         */
        if(StringUtils.isBlank(data.getCategoryName())) {
            validataList.add("类别名称不能为空");
        } else {
            SysDictData dictData = new SysDictData();
            dictData.setDictLabel(data.getCategoryName());
            List<SysDictData> list = this.sysDictDataService.selectDictDataList(dictData);
            if(list.isEmpty()) {
                validataList.add("类别名称编辑不正确");
            } else {
                data.setCategoryName(list.get(0).getDictValue());
            }
        }
        /**
         * 区不能为空
         */
        if(StringUtils.isBlank(data.getRegion())) {
            validataList.add("区不能为空");
        } else {
            regionId = this.regionService.getRegionIdByName(data.getRegion());
            if (StringUtils.isBlank(regionId)) {
                validataList.add("区信息编辑不正确");
            } else {
                data.setRegion(regionId);
            }
        }
        /**
         * 街道不能为空
         */
        if(StringUtils.isBlank(data.getStreet())) {
            validataList.add("街道不能为空");
        } else {
            streetId = this.regionService.getRegionIdByName(data.getStreet());
            RegionVo regionVo = this.regionService.queryById(streetId);
            if (regionVo == null || !regionId.equals(regionVo.getParentId())) {
                validataList.add("街道信息编辑不正确");
            } else {
                data.setStreet(streetId);
            }
        }
        /**
         * 社区不能为空
         */
        if(StringUtils.isBlank(data.getCommunity())) {
            validataList.add("社区不能为空");
        } else {
            communityId = this.regionService.getRegionIdByName(data.getCommunity());
            RegionVo regionVo = this.regionService.queryById(communityId);
            if (regionVo == null || !streetId.equals(regionVo.getParentId())) {
                validataList.add("社区信息编辑不正确");
            } else {
                data.setCommunity(communityId);
            }
        }
        /**
         * 地址不能为空
         */
        if(StringUtils.isBlank(data.getAddress())) {
            validataList.add("地址不能为空");
        }
        /**
         * 服务开始或服务结束时间不能为空
         */
		if (data.getServiceBeginDate() == null || data.getServiceEndDate() == null) {
			validataList.add("服务开始或服务结束时间不能为空");
		}
        /**
         * 服务类型不能空
         */
        if(this.serviceType == null) {
            validataList.add("服务类型不能为空");
        } else {
            String dictLabel =  this.sysDictDataService.selectDictLabel("erecord_service_type", this.serviceType);
            if(StringUtils.isBlank(dictLabel)) {
                validataList.add("服务类型与系统不匹配");
            } else {
                data.setServiceType(this.serviceType);
            }
        }
        /**
         * 照片
         */
        Integer col = this.getHeadColIndex("照片");
        if (null != col) {
            data.setPhoto(this.getPicOssIdOnMap(row, col));
        }

		if (!validataList.isEmpty()) {
			String errMsg = String.join(" ，", validataList);
			excelResult.getValidateList().add(errMsg);

			data.getDataCheckResult().setSucess(false);
			data.getDataCheckResult().setMsg(errMsg);
		} else {
			data.getDataCheckResult().setSucess(true);
		}
	}

	@Override
	protected void doOnExceptionProcess(String errorMsg) {

	}
}
